package com.ssyt.yt1.day7;

/**
 * <pre>
 * 重写（override）：
 * 1、发生成继承类中，与父类有相同的方法名和参数列表
 * 2、重写方法不能比父类方法有更为严格的访问权限：public > protected > default > private
 * 3、重写方法的返回值一定要类型兼容？子类的返回值有可能跟父类不一样，但子类的返回值类型必须要是父类返回值类型的子类！
 * </pre>
 * 
 * @author Administrator
 *
 */
class Car {

	private String brand;

	public Object getBrand() {
		return brand;
	}

	public void setBrand(String brand) {
		this.brand = brand;
	}

	// 如果父类的方法定义成一个private，子类声明为default，还叫重写吗？不是
	// private void printInfo() {
	// 如果父类的方法使用一个static修饰，子类声明为public，还叫重写吗？
	// public static void printInfo() {
	public void printInfo() {

	}
}

class BMW extends Car {

	// 属性不能被重写！！！
	// @Override
	// public String brand;

	@Override
	public String getBrand() {
		return this.getBrand();
	}

	@Override
	// Cannot reduce the visibility of the inherited method from Car
	public void printInfo() {
		System.out.println("车的品牌：" + super.getBrand());
	}

	// public void printBMWInfo() {
	// System.out.println("车的品牌：" + super.getBrand());
	// }
}

public class OverrideDemo {

	public static void main(String[] args) {
		BMW bmw = new BMW();
		bmw.setBrand("BMW");
		bmw.printInfo();
	}
}
